"""
自定义异常类

1. 添加错误

2. 更新错误

3. 关键字错误
"""
__all__ = ['AddError', 'UpdateError', 'KeywordError']


class AddError(BaseException):
    """
    添加错误。
        错误码1. 电话已存在
        错误码2. 电子邮箱已存在
        错误码3. 未知错误
    """

    def __init__(self, c, info):
        self.c = [c.get_name(), c.get_tel(), c.get_email()]
        self.i = info

    def print_error(self):
        print("\nContact add Failed: Name: {}\t Tel: {}\t Email:{}".format(*self.c))
        btalk = ["", "Tel has existed.\n", "Email has existed.\n", "Unknown Error.\n"]
        print(btalk[self.i])


class UpdateError(BaseException):
    """
    更新错误。
        错误码1. 旧信息不存在
        错误码2. 新信息已存在
        错误码3. 值的类型不正确
    """

    def __init__(self, ecode, attr, value):
        self.attr = attr
        self.i = ecode
        self.value = value

    def print_error(self):
        btalk = ["", f"无匹配旧{self.attr}: {self.value}的联系人。", f"您输入的新的{self.attr}: {self.value}已存在。",
                 f"对于属性{self.attr}, 参数new: {self.value}无效"]
        print(btalk[self.i])


class KeywordError(BaseException):
    """
    关键字错误。
        错误码1. 检索的关键字属性不存在或不是原子属性（例Head）
        错误码2. 排序规则无效
    """

    def __init__(self, ecode, keyword):
        self.k = keyword
        self.i = ecode

    def print_error(self):
        btalk = ["", f"{self.k}属性不存在或不是原子属性。", f"排序规则{self.k}无效。"]
        print(btalk[self.i])
